<html>
  <head>
    <meta charset="UTF-8"/>
    <title>Analysis Server API Specification</title>
  </head>
  <body>
    <h1>Analysis Server API Specification</h1>
    <h1 style="color:#999999">Version <version>1.6.2</version></h1>
    <p>
      This document contains a specification of the API provided by the
      analysis server.  The API in this document is currently under
      development.  Changes to the API will be accompanied by an update to the
      protocol version number according to the principles of semantic
      versioning <a href="http://semver.org/">http://semver.org/</a>.
    </p>
    <h2>Overview</h2>
    <p>
      The analysis server API is a bi-directional client-server
      API. The API is independent of the transport mechanism used, but
      is heavily influenced by a model in which sockets or character
      streams are used to transport JSON-RPC encoded information.
    </p>
    <h3>Transport Mechanism</h3>
    <p>
      The characters passed to the server are expected to be encoded
      using UTF-8.
    </p>
    <p>
      When character streams are used as the transport, messages are
      delineated by newlines. This means, in particular, that the JSON
      encoding process must not introduce newlines within a
      message. Note however that newlines are used in this document
      for readability.
    </p>
    <p>
      It is the client's responsibility to read output from the server to
      avoid its blocking.
    </p>
    <p>
      To ease interoperability with Lisp-based clients (which may not
      be able to easily distinguish between empty lists, empty maps,
      and null), client-to-server communication is allowed to replace
      any instance of “<tt>{}</tt>” or “<tt>[]</tt>” with null. The
      server will always properly represent empty lists as
      “<tt>[]</tt>” and empty maps as “<tt>{}</tt>”.
    </p>
    <h3>Communication Structure</h3>
    <p>
      Clients can make a request of the server and the server will
      provide a response for each request that it receives. While many
      of the requests that can be made by a client are informational
      in nature, we have chosen to always return a response so that
      clients can know whether the request was received and was
      correct.
    </p>
    <p>
      There is no guarantee concerning the order in which responses
      will be returned, but there is a guarantee that the server will
      process requests in the order in which they are sent as long as
      the transport mechanism also makes this guarantee. Responses can
      be returned in an order that is different from the order in
      which the requests were received because some requests take
      longer to process than others.
    </p>
    <p>
      Every request is required to have two fields and may have two
      additional optional fields. The first required field is the ‘id’
      field, which is only used by the server to associate a response
      with the request that generated the response. The second
      required field is the ‘method’ field, which is used to determine
      what the server is being requested to do. One optional field is
      the ‘params’ field, whose structure is dependent on the method
      being requested. The structure of this field is described with
      each request for which it is required. The other optional field
      is the 'clientRequestTime' field, which is a number indicating
      the time at which the client made the request (milliseconds
      since epoch). Providing clientRequestTime helps us track
      how responsive analysis server is to client requests
      and better address any issues that occur.
    </p>
    <p>
      Every response has up to three fields. The first field is the
      ‘id’ field, which is always present and whose value is the
      identifier that was passed to the request that generated the
      response. The second field is the ‘error’ field, which is only
      present if an error was encountered while processing the
      request. The third field is the ‘result’ field, whose structure
      is dependent on the method being responded to, and is described
      with each request that will produce it.
    </p>
    <p>
      The server can also communicate to the clients by sending a
      notification. The purpose of these notifications is to provide
      information to clients as it becomes available rather than to
      require that clients poll for it. Unless explicitly stated, all
      notifications are designed to return the complete information
      available at the time the notification is sent; clients are not
      required to update previously communicated
      results. Consequently, the server can and should return partial
      results before all results are available. For example, the
      syntactic errors for a file can be returned as soon as the
      syntactic analysis is complete, and both syntactic and semantic
      errors can be returned together at a later time.
    </p>
    <p>
      Each notification has two fields. The first field is the ‘event’
      field, which identifies the kind of notification. The second
      field is the ‘params’ field, whose structure is dependent on the
      kind of notification being sent. The structure of this field is
      described with each notification.
    </p>
    <p>
      In order to be backward compatible, clients should ignore fields that were
      not specified in the version of the API on which they were based. Clients
      should also use the server.getVersion request to test that the version of
      the server supports an API before using it.
    </p>
    <h3>Eventual Consistency</h3>
    <p>
      TBD
    </p>
    <h3>Domains</h3>
    <p>
      For convenience, the API is divided into domains. Each domain is
      specified in a separate section below:
    </p>
    <ul>
      <li><a href="#domain_server">Server</a></li>
      <li><a href="#domain_analysis">Analysis</a></li>
      <li><a href="#domain_completion">Code Completion</a></li>
      <li><a href="#domain_search">Search</a></li>
      <li><a href="#domain_edit">Edit</a></li>
      <li><a href="#domain_execution">Execution</a></li>
    </ul>
    <p>
      The specifications of the API’s refer to data structures beyond
      the standard JSON primitives. These data structures are
      documented in the section titled <a href="#types">Types</a>.
    </p>
    <h3>Command-line Arguments</h3>
    <p>
      The command-line arguments that can be passed to the server.
    </p>
    <h4>Options</h4>
    <blockquote>
    <dl>
      <dt>--no-error-notification</dt>
      <dd>
      Disable notifications about errors (see analysis.error). If this
      flag is not specified then notifications will be sent for all
      errors produced for all files in the actual analysis roots.
      </dd>
    </dl>
    <dl>
      <dt>--file-read-mode</dt>
      <dd>
      An enumeration of the ways files can be read from disk. Some clients
      normalize end of line characters which would make the file offset and
      range information incorrect. The default option is <tt>as-is</tt>, but
      can also be set to <tt>normalize-eol-always</tt>. The default option
      (<tt>as-is</tt>) reads files as they are on disk. The
      <tt>normalize-eol-always</tt> option does the following:
      <ul>
        <li>'\r\n' is converted to '\n';</li>
        <li>'\r' by itself is converted to '\n';</li>
        <li>this happens regardless of the OS editor is running on.</li>
      </ul>
      </dd>
    </dl>
    <dl>
      <dt>--no-index</dt>
      <dd>
      Disable the server from generating an index. If this flag is passed and an
      API is used that requires an index, then an error, <tt>NO_INDEX_GENERATED</tt>,
      will be thrown. The set of API calls that require an index include:
      refactoring calls, code completions and searching.
      <!-- TODO(jwren/scheglov): make sure that this of APIs that is complete. -->
      </dd>
    </dl>
    </blockquote>
    <domain name="server">
      <p>
        The server domain contains API’s related to the execution of
        the server.
      </p>
      <request method="getVersion">
        <p>Return the version number of the analysis server.</p>
        <result>
          <field name="version">
            <ref>String</ref>
            <p>The version number of the analysis server.</p>
          </field>
        </result>
      </request>
      <request method="shutdown">
        <p>
          Cleanly shutdown the analysis server. Requests that are
          received after this request will not be processed. Requests
          that were received before this request, but for which a
          response has not yet been sent, will not be responded to. No
          further responses or notifications will be sent after the
          response to this request has been sent.
        </p>
      </request>
      <request method="setSubscriptions">
        <p>
          Subscribe for services. All previous subscriptions are
          replaced by the given set of services.
        </p>
        <p>
          It is an error if any of the elements in the list are not
          valid services. If there is an error, then the current
          subscriptions will remain unchanged.
        </p>
        <params>
          <field name="subscriptions">
            <list><ref>ServerService</ref></list>
            <p>A list of the services being subscribed to.</p>
          </field>
        </params>
      </request>
      <notification event="connected">
        <p>
          Reports that the server is running. This notification is
          issued once after the server has started running but before
          any requests are processed to let the client know that it
          started correctly.
        </p>
        <p>
          It is not possible to subscribe to or unsubscribe from this
          notification.
        </p>
       <params>
          <field name="version">
            <ref>String</ref>
            <p>The version number of the analysis server.</p>
          </field>
        </params>
      </notification>
      <notification event="error">
        <p>
          Reports that an unexpected error has occurred while
          executing the server. This notification is not used for
          problems with specific requests (which are returned as part
          of the response) but is used for exceptions that occur while
          performing other tasks, such as analysis or preparing
          notifications.
        </p>
        <p>
          It is not possible to subscribe to or unsubscribe from this
          notification.
        </p>
        <params>
          <field name="isFatal">
            <ref>bool</ref>
            <p>
              True if the error is a fatal error, meaning that the
              server will shutdown automatically after sending this
              notification.
            </p>
          </field>
          <field name="message">
            <ref>String</ref>
            <p>
              The error message indicating what kind of error was
              encountered.
            </p>
          </field>
          <field name="stackTrace">
            <ref>String</ref>
            <p>
              The stack trace associated with the generation of the
              error, used for debugging the server.
            </p>
          </field>
        </params>
      </notification>
      <notification event="status">
        <p>
          Reports the current status of the server. Parameters are
          omitted if there has been no change in the status
          represented by that parameter.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"STATUS"</tt> in
          the list of services passed in a server.setSubscriptions
          request.
        </p>
        <params>
          <field name="analysis" optional="true">
            <ref>AnalysisStatus</ref>
            <p>
              The current status of analysis, including whether
              analysis is being performed and if so what is being
              analyzed.
            </p>
          </field>
          <field name="pub" optional="true">
            <ref>PubStatus</ref>
            <p>
              The current status of pub execution, indicating whether we are
              currently running pub.
            </p>
          </field>
        </params>
      </notification>
    </domain>
    <domain name="analysis">
      <p>
        The analysis domain contains API’s related to the analysis of
        files.
      </p>
      <request method="getErrors">
        <p>
          Return the errors associated with the given file. If the
          errors for the given file have not yet been computed, or the
          most recently computed errors for the given file are out of
          date, then the response for this request will be delayed
          until they have been computed. If some or all of the errors
          for the file cannot be computed, then the subset of the
          errors that can be computed will be returned and the
          response will contain an error to indicate why the errors
          could not be computed. If the content of the file changes after this
          request was received but before a response could be sent, then an
          error of type <tt>CONTENT_MODIFIED</tt> will be generated.
        </p>
        <p>
          This request is intended to be used by clients that cannot
          asynchronously apply updated error information. Clients that
          <b>can</b> apply error information as it becomes available
          should use the information provided by the 'analysis.errors'
          notification.
        </p>
        <p>
          If a request is made for a file which does not exist, or
          which is not currently subject to analysis (e.g. because it
          is not associated with any analysis root specified to
          analysis.setAnalysisRoots), an error of type
          <tt>GET_ERRORS_INVALID_FILE</tt> will be generated.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file for which errors are being requested.
            </p>
          </field>
        </params>
        <result>
          <field name="errors">
            <list><ref>AnalysisError</ref></list>
            <p>
              The errors associated with the file.
            </p>
          </field>
        </result>
      </request>
      <request method="getHover">
        <p>
          Return the hover information associate with the given
          location. If some or all of the hover information is not
          available at the time this request is processed the
          information will be omitted from the response.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file in which hover information is being requested.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset for which hover information is being requested.
            </p>
          </field>
        </params>
        <result>
          <field name="hovers">
            <list><ref>HoverInformation</ref></list>
            <p>
              The hover information associated with the
              location. The list will be empty if no information
              could be determined for the location. The list can
              contain multiple items if the file is being analyzed
              in multiple contexts in conflicting ways (such as a
              part that is included in multiple libraries).
            </p>
          </field>
        </result>
      </request>
      <request method="getLibraryDependencies">
        <p>
          Return library dependency information for use in client-side indexing
          and package URI resolution.
        </p>
        <result>
          <field name="libraries">
            <list><ref>FilePath</ref></list>
              <p>
                A list of the paths of library elements referenced by
                files in existing analysis roots.
              </p>
            </field>
            <field name="packageMap">
              <map>
                <key><ref>String</ref></key>
                <value>
                  <map>
                    <key><ref>String</ref></key>
                    <value><list><ref>FilePath</ref></list></value>
                  </map>
                </value>
              </map>
              <p>
                A mapping from context source roots to package maps which map
                package names to source directories for use in client-side
                package URI resolution.
              </p>
            </field>
        </result>
      </request>
      <request method="getNavigation">
        <p>
          Return the navigation information associated with the given region of
          the given file. If the navigation information for the given file has
          not yet been computed, or the most recently computed navigation
          information for the given file is out of date, then the response for
          this request will be delayed until it has been computed. If the
          content of the file changes after this request was received but before
          a response could be sent, then an error of type
          <tt>CONTENT_MODIFIED</tt> will be generated.
        </p>
        <p>
          If a navigation region overlaps (but extends either before or after)
          the given region of the file it will be included in the result. This
          means that it is theoretically possible to get the same navigation
          region in response to multiple requests. Clients can avoid this by
          always choosing a region that starts at the beginning of a line and
          ends at the end of a (possibly different) line in the file.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file in which navigation information is being requested.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region for which navigation information is being
              requested.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region for which navigation information is being
              requested.
            </p>
          </field>
        </params>
        <result>
          <field name="files">
            <list><ref>FilePath</ref></list>
            <p>
              A list of the paths of files that are referenced by the navigation
              targets.
            </p>
          </field>
          <field name="targets">
            <list><ref>NavigationTarget</ref></list>
            <p>
              A list of the navigation targets that are referenced by the
              navigation regions.
            </p>
          </field>
          <field name="regions">
            <list><ref>NavigationRegion</ref></list>
            <p>
              A list of the navigation regions within the requested region of
              the file.
            </p>
          </field>
        </result>
      </request>
      <request method="reanalyze">
        <p>
          Force the re-analysis of everything contained in the specified
          analysis roots. This will cause all previously computed analysis
          results to be discarded and recomputed, and will cause all subscribed
          notifications to be re-sent.
        </p>
        <p>
          If no analysis roots are provided, then all current analysis roots
          will be re-analyzed. If an empty list of analysis roots is provided,
          then nothing will be re-analyzed. If the list contains one or more
          paths that are not currently analysis roots, then an error of type
          <tt>INVALID_ANALYSIS_ROOT</tt> will be generated.
        </p>
        <params>
          <field name="roots" optional="true">
            <list><ref>FilePath</ref></list>
            <p>
              A list of the analysis roots that are to be re-analyzed.
            </p>
          </field>
        </params>
      </request>
      <request method="setAnalysisRoots">
        <p>
          Sets the root paths used to determine which files to analyze. The set
          of files to be analyzed are all of the files in one of the root paths
          that are not either explicitly or implicitly excluded. A file is
          explicitly excluded if it is in one of the excluded paths. A file is
          implicitly excluded if it is in a subdirectory of one of the root
          paths where the name of the subdirectory starts with a period (that
          is, a hidden directory).
        </p>
        <p>
          Note that this request determines the set of requested
          analysis roots. The actual set of analysis roots at any
          given time is the intersection of this set with the set of
          files and directories actually present on the
          filesystem. When the filesystem changes, the actual set of
          analysis roots is automatically updated, but the set of
          requested analysis roots is unchanged. This means that if
          the client sets an analysis root before the root becomes
          visible to server in the filesystem, there is no error; once
          the server sees the root in the filesystem it will start
          analyzing it. Similarly, server will stop analyzing files
          that are removed from the file system but they will remain
          in the set of requested roots.
        </p>
        <p>
          If an included path represents a file, then server will look
          in the directory containing the file for a pubspec.yaml
          file. If none is found, then the parents of the directory
          will be searched until such a file is found or the root of
          the file system is reached. If such a file is found, it will
          be used to resolve package: URI’s within the file.
        </p>
        <params>
          <field name="included">
            <list><ref>FilePath</ref></list>
            <p>
              A list of the files and directories that should be
              analyzed.
            </p>
          </field>
          <field name="excluded">
            <list><ref>FilePath</ref></list>
            <p>
              A list of the files and directories within the
              included directories that should not be analyzed.
            </p>
          </field>
          <field name="packageRoots" optional="true">
            <map>
              <key><ref>FilePath</ref></key>
              <value><ref>FilePath</ref></value>
            </map>
            <p>
              A mapping from source directories to target directories
              that should override the normal package: URI resolution
              mechanism.  The analyzer will behave as though each
              source directory in the map contains a special
              pubspec.yaml file which resolves any package: URI to the
              corresponding path within the target directory.  The
              effect is the same as specifying the target directory as
              a "--package_root" parameter to the Dart VM when
              executing any Dart file inside the source directory.
            </p>
            <p>
              Files in any directories that are not overridden by this
              mapping have their package: URI's resolved using the
              normal pubspec.yaml mechanism.  If this field is absent,
              or the empty map is specified, that indicates that the
              normal pubspec.yaml mechanism should always be used.
            </p>
          </field>
        </params>
      </request>
      <request method="setPriorityFiles">
        <p>
          Set the priority files to the files in the given list. A
          priority file is a file that is given priority when
          scheduling which analysis work to do first. The list
          typically contains those files that are visible to the user
          and those for which analysis results will have the biggest
          impact on the user experience. The order of the files within
          the list is significant: the first file will be given higher
          priority than the second, the second higher priority than
          the third, and so on.
        </p>
        <p>
          Note that this request determines the set of requested
          priority files. The actual set of priority files is the
          intersection of the requested set of priority files with the
          set of files currently subject to analysis. (See
          analysis.setSubscriptions for a description of files that
          are subject to analysis.)
        </p>
        <p>
          If a requested priority file is a directory it is ignored,
          but remains in the set of requested priority files so that
          if it later becomes a file it can be included in the set of
          actual priority files.
        </p>
        <params>
          <field name="files">
            <list><ref>FilePath</ref></list>
            <p>
              The files that are to be a priority for analysis.
            </p>
          </field>
        </params>
      </request>
      <request method="setSubscriptions">
        <p>
          Subscribe for services. All previous subscriptions are
          replaced by the current set of subscriptions. If a given
          service is not included as a key in the map then no files
          will be subscribed to the service, exactly as if the service
          had been included in the map with an explicit empty list of
          files.
        </p>
        <p>
          Note that this request determines the set of requested
          subscriptions. The actual set of subscriptions at any given
          time is the intersection of this set with the set of files
          currently subject to analysis. The files currently subject
          to analysis are the set of files contained within an actual
          analysis root but not excluded, plus all of the files
          transitively reachable from those files via import, export
          and part directives. (See analysis.setAnalysisRoots for an
          explanation of how the actual analysis roots are
          determined.) When the actual analysis roots change, the
          actual set of subscriptions is automatically updated, but
          the set of requested subscriptions is unchanged.
        </p>
        <p>
          If a requested subscription is a directory it is ignored,
          but remains in the set of requested subscriptions so that if
          it later becomes a file it can be included in the set of
          actual subscriptions.
        </p>
        <p>
          It is an error if any of the keys in the map are not valid
          services. If there is an error, then the existing
          subscriptions will remain unchanged.
        </p>
        <params>
          <field name="subscriptions">
            <map>
              <key><ref>AnalysisService</ref></key>
              <value>
                <list><ref>FilePath</ref></list>
              </value>
            </map>
            <p>
              A table mapping services to a list of the files being
              subscribed to the service.
            </p>
          </field>
        </params>
      </request>
      <request method="updateContent">
        <p>
          Update the content of one or more files. Files that were
          previously updated but not included in this update remain
          unchanged. This effectively represents an overlay of the
          filesystem. The files whose content is overridden are
          therefore seen by server as being files with the given
          content, even if the files do not exist on the filesystem or
          if the file path represents the path to a directory on the
          filesystem.
        </p>
        <params>
          <field name="files">
            <map>
              <key><ref>FilePath</ref></key>
              <value>
                <union field="type">
                  <ref>AddContentOverlay</ref>
                  <ref>ChangeContentOverlay</ref>
                  <ref>RemoveContentOverlay</ref>
                </union>
              </value>
            </map>
            <p>
              A table mapping the files whose content has changed to a
              description of the content change.
            </p>
          </field>
        </params>
        <result>
        </result>
      </request>
      <request method="updateOptions">
        <p>
          Update the options controlling analysis based on the given
          set of options. Any options that are not included in the
          analysis options will not be changed. If there are options
          in the analysis options that are not valid, they will be
          silently ignored.
        </p>
        <params>
          <field name="options">
            <ref>AnalysisOptions</ref>
            <p>
              The options that are to be used to control analysis.
            </p>
          </field>
        </params>
      </request>
      <notification event="errors">
        <p>
          Reports the errors associated with a given file. The set of
          errors included in the notification is always a complete
          list that supersedes any previously reported errors.
        </p>
        <p>
          It is only possible to unsubscribe from this notification by
          using the command-line flag --no-error-notification.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the errors.
            </p>
          </field>
          <field name="errors">
            <list><ref>AnalysisError</ref></list>
            <p>
              The errors contained in the file.
            </p>
          </field>
        </params>
      </notification>
      <notification event="flushResults">
        <p>
          Reports that any analysis results that were previously
          associated with the given files should be considered to be
          invalid because those files are no longer being analyzed,
          either because the analysis root that contained it is no
          longer being analyzed or because the file no longer exists.
        </p>
        <p>
          If a file is included in this notification and at some later
          time a notification with results for the file is received,
          clients should assume that the file is once again being
          analyzed and the information should be processed.
        </p>
        <p>
          It is not possible to subscribe to or unsubscribe from this
          notification.
        </p>
        <params>
          <field name="files">
            <list><ref>FilePath</ref></list>
            <p>
              The files that are no longer being analyzed.
            </p>
          </field>
        </params>
      </notification>
      <notification event="folding">
        <p>
          Reports the folding regions associated with a given
          file. Folding regions can be nested, but will not be
          overlapping. Nesting occurs when a foldable element, such as
          a method, is nested inside another foldable element such as
          a class.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"FOLDING"</tt> in
          the list of services passed in an analysis.setSubscriptions
          request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the folding regions.
            </p>
          </field>
          <field name="regions">
            <list><ref>FoldingRegion</ref></list>
            <p>
              The folding regions contained in the file.
            </p>
          </field>
        </params>
      </notification>
      <notification event="highlights">
        <p>
          Reports the highlight regions associated with a given file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"HIGHLIGHTS"</tt>
          in the list of services passed in an
          analysis.setSubscriptions request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the highlight regions.
            </p>
          </field>
          <field name="regions">
            <list><ref>HighlightRegion</ref></list>
            <p>
              The highlight regions contained in the file. Each
              highlight region represents a particular syntactic or
              semantic meaning associated with some range. Note that
              the highlight regions that are returned can overlap
              other highlight regions if there is more than one
              meaning associated with a particular region.
            </p>
          </field>
        </params>
      </notification>
      <notification event="invalidate">
        <p>
          Reports that the navigation information associated with a region of a
          single file has become invalid and should be re-requested.
        </p>
        <p>
          This notification is not subscribed to by default. Clients can
          subscribe by including the value <tt>"INVALIDATE"</tt> in the list of
          services passed in an analysis.setSubscriptions request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file whose information has been invalidated.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the invalidated region.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the invalidated region.
            </p>
          </field>
          <field name="delta">
            <ref>int</ref>
            <p>
              The delta to be applied to the offsets in information that follows
              the invalidated region in order to update it so that it doesn't
              need to be re-requested.
            </p>
          </field>
        </params>
      </notification>
      <notification event="navigation">
        <p>
          Reports the navigation targets associated with a given file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"NAVIGATION"</tt>
          in the list of services passed in an
          analysis.setSubscriptions request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the navigation regions.
            </p>
          </field>
          <field name="regions">
            <list><ref>NavigationRegion</ref></list>
            <p>
              The navigation regions contained in the file.
              The regions are sorted by their offsets.
              Each navigation region represents a list of targets
              associated with some range. The lists will usually
              contain a single target, but can contain more in the
              case of a part that is included in multiple libraries
              or in Dart code that is compiled against multiple
              versions of a package. Note that the navigation
              regions that are returned do not overlap other
              navigation regions.
            </p>
          </field>
          <field name="targets">
            <list><ref>NavigationTarget</ref></list>
            <p>
              The navigation targets referenced in the file.
              They are referenced by <tt>NavigationRegion</tt>s by their
              index in this array.
            </p>
          </field>
          <field name="files">
            <list><ref>FilePath</ref></list>
            <p>
              The files containing navigation targets referenced in the file.
              They are referenced by <tt>NavigationTarget</tt>s by their
              index in this array.
            </p>
          </field>
        </params>
      </notification>
      <notification event="occurrences">
        <p>
          Reports the occurrences of references to elements within a
          single file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"OCCURRENCES"</tt>
          in the list of services passed in an
          analysis.setSubscriptions request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file in which the references occur.
            </p>
          </field>
          <field name="occurrences">
            <list><ref>Occurrences</ref></list>
            <p>
              The occurrences of references to elements within the
              file.
            </p>
          </field>
        </params>
      </notification>
      <notification event="outline">
        <p>
          Reports the outline associated with a single file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"OUTLINE"</tt> in
          the list of services passed in an analysis.setSubscriptions
          request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file with which the outline is associated.
            </p>
          </field>
          <field name="outline">
            <ref>Outline</ref>
            <p>
              The outline associated with the file.
            </p>
          </field>
        </params>
      </notification>
      <notification event="overrides">
        <p>
          Reports the overridding members in a file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"OVERRIDES"</tt> in
          the list of services passed in an analysis.setSubscriptions
          request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file with which the overrides are associated.
            </p>
          </field>
          <field name="overrides">
            <list><ref>Override</ref></list>
            <p>
              The overrides associated with the file.
            </p>
          </field>
        </params>
      </notification>
    </domain>
    <domain name="completion">
      <p>
        The code completion domain contains commands related to
        getting code completion suggestions.
      </p>
      <request method="getSuggestions">
        <p>
          Request that completion suggestions for the given offset in
          the given file be returned.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the point at which suggestions are
              to be made.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset within the file at which suggestions are to
              be made.
            </p>
          </field>
        </params>
        <result>
          <field name="id">
            <ref>CompletionId</ref>
            <p>
              The identifier used to associate results with this
              completion request.
            </p>
          </field>
        </result>
      </request>
      <notification event="results">
        <p>
          Reports the completion suggestions that should be presented
          to the user. The set of suggestions included in the
          notification is always a complete list that supersedes any
          previously reported suggestions.
        </p>
        <params>
          <field name="id">
            <ref>CompletionId</ref>
            <p>
              The id associated with the completion.
            </p>
          </field>
          <field name="replacementOffset">
            <ref>int</ref>
            <p>
              The offset of the start of the text to be
              replaced. This will be different than the offset used
              to request the completion suggestions if there was a
              portion of an identifier before the original
              offset. In particular, the replacementOffset will be
              the offset of the beginning of said identifier.
            </p>
          </field>
          <field name="replacementLength">
            <ref>int</ref>
            <p>
              The length of the text to be replaced if the remainder
              of the identifier containing the cursor is to be
              replaced when the suggestion is applied (that is, the
              number of characters in the existing identifier).
            </p>
          </field>
          <field name="results">
            <list><ref>CompletionSuggestion</ref></list>
            <p>
              The completion suggestions being reported.  The
              notification contains all possible completions at the
              requested cursor position, even those that do not match
              the characters the user has already typed.  This allows
              the client to respond to further keystrokes from the
              user without having to make additional requests.
            </p>
          </field>
          <field name="isLast">
            <ref>bool</ref>
            <p>
              True if this is that last set of results that will be
              returned for the indicated completion.
            </p>
          </field>
        </params>
      </notification>
    </domain>
    <domain name="search">
      <p>
        The search domain contains commands related to searches that
        can be performed against the code base.
      </p>
      <request method="findElementReferences">
        <p>
          Perform a search for references to the element defined or
          referenced at the given offset in the given file.
        </p>
        <p>
          An identifier is returned immediately, and individual
          results will be returned via the search.results notification
          as they become available.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the declaration of or reference to
              the element used to define the search.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset within the file of the declaration of or
              reference to the element.
            </p>
          </field>
          <field name="includePotential">
            <ref>bool</ref>
            <p>
              True if potential matches are to be included in the
              results.
            </p>
          </field>
        </params>
        <result>
          <field name="id" optional="true">
            <ref>SearchId</ref>
            <p>
              The identifier used to associate results with this
              search request.
            </p>
            <p>
              If no element was found at the given location, this
              field will be absent, and no results will be reported
              via the search.results notification.
            </p>
          </field>
          <field name="element" optional="true">
            <ref>Element</ref>
            <p>
              The element referenced or defined at the given offset
              and whose references will be returned in the search
              results.
            </p>
            <p>
              If no element was found at the given location, this
              field will be absent.
            </p>
          </field>
        </result>
      </request>
      <request method="findMemberDeclarations">
        <p>
          Perform a search for declarations of members whose name is
          equal to the given name.
        </p>
        <p>
          An identifier is returned immediately, and individual
          results will be returned via the search.results notification
          as they become available.
        </p>
        <params>
          <field name="name">
            <ref>String</ref>
            <p>
              The name of the declarations to be found.
            </p>
          </field>
        </params>
        <result>
          <field name="id">
            <ref>SearchId</ref>
            <p>
              The identifier used to associate results with this
              search request.
            </p>
          </field>
        </result>
      </request>
      <request method="findMemberReferences">
        <p>
          Perform a search for references to members whose name is
          equal to the given name. This search does not check to see
          that there is a member defined with the given name, so it is
          able to find references to undefined members as well.
        </p>
        <p>
          An identifier is returned immediately, and individual
          results will be returned via the search.results notification
          as they become available.
        </p>
        <params>
          <field name="name">
            <ref>String</ref>
            <p>
              The name of the references to be found.
            </p>
          </field>
        </params>
        <result>
          <field name="id">
            <ref>SearchId</ref>
            <p>
              The identifier used to associate results with this
              search request.
            </p>
          </field>
        </result>
      </request>
      <request method="findTopLevelDeclarations">
        <p>
          Perform a search for declarations of top-level elements
          (classes, typedefs, getters, setters, functions and fields)
          whose name matches the given pattern.
        </p>
        <p>
          An identifier is returned immediately, and individual
          results will be returned via the search.results notification
          as they become available.
        </p>
        <params>
          <field name="pattern">
            <ref>String</ref>
            <p>
              The regular expression used to match the names of the
              declarations to be found.
            </p>
          </field>
        </params>
        <result>
          <field name="id">
            <ref>SearchId</ref>
            <p>
              The identifier used to associate results with this
              search request.
            </p>
          </field>
        </result>
      </request>
      <request method="getTypeHierarchy">
        <p>
          Return the type hierarchy of the class declared or
          referenced at the given location.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the declaration or reference to the
              type for which a hierarchy is being requested.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the name of the type within the file.
            </p>
          </field>
        </params>
        <result>
          <field name="hierarchyItems" optional="true">
            <list><ref>TypeHierarchyItem</ref></list>
            <p>
              A list of the types in the requested hierarchy. The
              first element of the list is the item representing the
              type for which the hierarchy was requested. The index of
              other elements of the list is unspecified, but
              correspond to the integers used to reference supertype
              and subtype items within the items.
            </p>
            <p>
              This field will be absent if the code at the given file
              and offset does not represent a type, or if the file has
              not been sufficiently analyzed to allow a type hierarchy
              to be produced.
            </p>
          </field>
        </result>
      </request>
      <notification event="results">
        <p>
          Reports some or all of the results of performing a requested
          search. Unlike other notifications, this notification
          contains search results that should be added to any
          previously received search results associated with the same
          search id.
        </p>
        <params>
          <field name="id">
            <ref>SearchId</ref>
            <p>
              The id associated with the search.
            </p>
          </field>
          <field name="results">
            <list><ref>SearchResult</ref></list>
            <p>
              The search results being reported.
            </p>
          </field>
          <field name="isLast">
            <ref>bool</ref>
            <p>
              True if this is that last set of results that will be
              returned for the indicated search.
            </p>
          </field>
        </params>
      </notification>
    </domain>
    <domain name="edit">
      <p>
        The edit domain contains commands related to edits that can be
        applied to the code.
      </p>
      <request method="format">
        <p>
          Format the contents of a single file. The currently selected region of
          text is passed in so that the selection can be preserved across the
          formatting operation. The updated selection will be as close to
          matching the original as possible, but whitespace at the beginning or
          end of the selected region will be ignored. If preserving selection
          information is not required, zero (0) can be specified for both the
          selection offset and selection length.
        </p>
        <p>
          If a request is made for a file which does not exist, or which is not
          currently subject to analysis (e.g. because it is not associated with
          any analysis root specified to analysis.setAnalysisRoots), an error of
          type <tt>FORMAT_INVALID_FILE</tt> will be generated. If the source
          contains syntax errors, an error of type <tt>FORMAT_WITH_ERRORS</tt>
          will be generated.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the code to be formatted.
            </p>
          </field>
          <field name="selectionOffset">
            <ref>int</ref>
            <p>
              The offset of the current selection in the file.
            </p>
          </field>
          <field name="selectionLength">
            <ref>int</ref>
            <p>
              The length of the current selection in the file.
            </p>
          </field>
          <!--
          <field name="selectionOnly" optional="true">
            <ref>bool</ref>
            <p>
              True if the code to be formatted should be limited to the selected
              text (or the smallest portion of text that encloses the selected
              text that can be formatted).
            </p>
          </field>
          -->
        </params>
        <result>
          <field name="edits">
            <list><ref>SourceEdit</ref></list>
            <p>
              The edit(s) to be applied in order to format the code. The list
              will be empty if the code was already formatted (there are no
              changes).
            </p>
          </field>
          <field name="selectionOffset">
            <ref>int</ref>
            <p>
              The offset of the selection after formatting the code.
            </p>
          </field>
          <field name="selectionLength">
            <ref>int</ref>
            <p>
              The length of the selection after formatting the code.
            </p>
          </field>
        </result>
      </request>
      <request method="getAssists">
        <p>
          Return the set of assists that are available at the given
          location. An assist is distinguished from a refactoring
          primarily by the fact that it affects a single file and does
          not require user input in order to be performed.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the code for which assists are being
              requested.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the code for which assists are being
              requested.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the code for which assists are being
              requested.
            </p>
          </field>
        </params>
        <result>
          <field name="assists">
            <list><ref>SourceChange</ref></list>
            <p>
              The assists that are available at the given location.
            </p>
          </field>
        </result>
      </request>
      <request method="getAvailableRefactorings">
        <p>
          Get a list of the kinds of refactorings that are valid for
          the given selection in the given file.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the code on which the refactoring
              would be based.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the code on which the refactoring would be
              based.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the code on which the refactoring would be
              based.
            </p>
          </field>
        </params>
        <result>
          <field name="kinds">
            <list><ref>RefactoringKind</ref></list>
            <p>
              The kinds of refactorings that are valid for the given
              selection.
            </p>
          </field>
        </result>
      </request>
      <request method="getFixes">
        <p>
          Return the set of fixes that are available for the errors at
          a given offset in a given file.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the errors for which fixes are being
              requested.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset used to select the errors for which fixes
              will be returned.
            </p>
          </field>
        </params>
        <result>
          <field name="fixes">
            <list><ref>AnalysisErrorFixes</ref></list>
            <p>
              The fixes that are available for the errors at the given offset.
            </p>
          </field>
        </result>
      </request>
      <request method="getRefactoring">
        <p>
          Get the changes required to perform a refactoring.
        </p>
        <p>
          If another refactoring request is received during the processing
          of this one, an error of type <tt>REFACTORING_REQUEST_CANCELLED</tt>
          will be generated.
        </p>
        <params>
          <field name="kind">
            <ref>RefactoringKind</ref>
            <p>
              The kind of refactoring to be performed.
            </p>
          </field>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the code involved in the
              refactoring.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region involved in the refactoring.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region involved in the refactoring.
            </p>
          </field>
          <field name="validateOnly">
            <ref>bool</ref>
            <p>
              True if the client is only requesting that the values of
              the options be validated and no change be generated.
            </p>
          </field>
          <field name="options" optional="true">
            <ref>RefactoringOptions</ref>
            <p>
              Data used to provide values provided by the user. The
              structure of the data is dependent on the kind of
              refactoring being performed. The data that is expected is
              documented in the section titled <a
              href="#refactorings">Refactorings</a>, labeled as
              “Options”. This field can be omitted if the refactoring
              does not require any options or if the values of those
              options are not known.
            </p>
          </field>
        </params>
        <result>
          <field name="initialProblems">
            <list><ref>RefactoringProblem</ref></list>
            <p>
              The initial status of the refactoring, i.e. problems related to
              the context in which the refactoring is requested.
              The array will be empty if there are no known problems.
            </p>
          </field>
          <field name="optionsProblems">
            <list><ref>RefactoringProblem</ref></list>
            <p>
              The options validation status, i.e. problems in the given options,
              such as light-weight validation of a new name, flags
              compatibility, etc.
              The array will be empty if there are no known problems.
            </p>
          </field>
          <field name="finalProblems">
            <list><ref>RefactoringProblem</ref></list>
            <p>
              The final status of the refactoring, i.e. problems identified in
              the result of a full, potentially expensive validation and / or
              change creation.
              The array will be empty if there are no known problems.
            </p>
          </field>
          <field name="feedback" optional="true">
            <ref>RefactoringFeedback</ref>
            <p>
              Data used to provide feedback to the user. The structure
              of the data is dependent on the kind of refactoring
              being created. The data that is returned is documented
              in the section titled <a
              href="#refactorings">Refactorings</a>, labeled as
              “Feedback”.
            </p>
          </field>
          <field name="change" optional="true">
            <ref>SourceChange</ref>
            <p>
              The changes that are to be applied to affect the
              refactoring. This field will be omitted if there are
              problems that prevent a set of changes from being
              computed, such as having no options specified for a
              refactoring that requires them, or if only validation
              was requested.
            </p>
          </field>
          <field name="potentialEdits" optional="true">
            <list><ref>String</ref></list>
            <p>
              The ids of source edits that are not known to be valid. An edit is
              not known to be valid if there was insufficient type information
              for the server to be able to determine whether or not the code
              needs to be modified, such as when a member is being renamed and
              there is a reference to a member from an unknown type. This field
              will be omitted if the change field is omitted or if there are no
              potential edits for the refactoring.
            </p>
          </field>
        </result>
      </request>
      <request method="sortMembers">
        <p>
          Sort all of the directives, unit and class members
          of the given Dart file.
        </p>
        <p>
          If a request is made for a file that does not exist, does not belong
          to an analysis root or is not a Dart file,
          <tt>SORT_MEMBERS_INVALID_FILE</tt> will be generated.
        </p>
        <p>
          If the Dart file has scan or parse errors,
          <tt>SORT_MEMBERS_PARSE_ERRORS</tt> will be generated.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The Dart file to sort.
            </p>
          </field>
        </params>
        <result>
          <field name="edit">
            <ref>SourceFileEdit</ref>
            <p>
              The file edit that is to be applied to the given file to effect
              the sorting.
            </p>
          </field>
        </result>
      </request>
    </domain>
    <domain name="execution">
      <p>
        The execution domain contains commands related to providing an execution
        or debugging experience.
      </p>
      <request method="createContext">
        <p>
          Create an execution context for the executable file with the given
          path. The context that is created will persist until
          execution.deleteContext is used to delete it. Clients, therefore, are
          responsible for managing the lifetime of execution contexts.
        </p>
        <params>
          <field name="contextRoot">
            <ref>FilePath</ref>
            <p>
              The path of the Dart or HTML file that will be launched, or the
              path of the directory containing the file.
            </p>
          </field>
        </params>
        <result>
          <field name="id">
            <ref>ExecutionContextId</ref>
            <p>
              The identifier used to refer to the execution context that was
              created.
            </p>
          </field>
        </result>
      </request>
      <request method="deleteContext">
        <p>
          Delete the execution context with the given identifier. The context id
          is no longer valid after this command. The server is allowed to re-use
          ids when they are no longer valid.
        </p>
        <params>
          <field name="id">
            <ref>ExecutionContextId</ref>
            <p>
              The identifier of the execution context that is to be deleted.
            </p>
          </field>
        </params>
      </request>
      <request method="mapUri">
        <p>
          Map a URI from the execution context to the file that it corresponds
          to, or map a file to the URI that it corresponds to in the execution
          context.
        </p>
        <p>
          Exactly one of the file and uri fields must be provided. If both
          fields are provided, then an error of type <tt>INVALID_PARAMETER</tt>
          will be generated. Similarly, if neither field is provided, then an
          error of type <tt>INVALID_PARAMETER</tt> will be generated.
        </p>
        <p>
          If the file field is provided and the value is not the path of a file
          (either the file does not exist or the path references something other
          than a file), then an error of type <tt>INVALID_PARAMETER</tt> will
          be generated.
        </p>
        <p>
          If the uri field is provided and the value is not a valid URI or if
          the URI references something that is not a file (either a file that
          does not exist or something other than a file), then an error of type
          <tt>INVALID_PARAMETER</tt> will be generated.
        </p>
        <p>
          If the contextRoot used to create the execution context does not
          exist, then an error of type <tt>INVALID_EXECUTION_CONTEXT</tt> will
          be generated.
        </p>
        <params>
          <field name="id">
            <ref>ExecutionContextId</ref>
            <p>
              The identifier of the execution context in which the URI is to be
              mapped.
            </p>
          </field>
          <field name="file" optional="true">
            <ref>FilePath</ref>
            <p>
              The path of the file to be mapped into a URI.
            </p>
          </field>
          <field name="uri" optional="true">
            <ref>String</ref>
            <p>
              The URI to be mapped into a file path.
            </p>
          </field>
        </params>
        <result>
          <field name="file" optional="true">
            <ref>FilePath</ref>
            <p>
              The file to which the URI was mapped. This field is omitted if the
              uri field was not given in the request.
            </p>
          </field>
          <field name="uri" optional="true">
            <ref>String</ref>
            <p>
              The URI to which the file path was mapped. This field is omitted
              if the file field was not given in the request.
            </p>
          </field>
        </result>
      </request>
      <request method="setSubscriptions">
        <p>
          Subscribe for services. All previous subscriptions are replaced by the
          given set of services.
        </p>
        <p>
          It is an error if any of the elements in the list are not valid
          services. If there is an error, then the current subscriptions will
          remain unchanged.
        </p>
        <params>
          <field name="subscriptions">
            <list><ref>ExecutionService</ref></list>
            <p>
              A list of the services being subscribed to.
            </p>
          </field>
        </params>
      </request>
      <notification event="launchData">
        <p>
          Reports information needed to allow a single file to be launched.
        </p>
        <p>
          This notification is not subscribed to by default. Clients can
          subscribe by including the value "LAUNCH_DATA" in the list of services
          passed in an <tt>execution.setSubscriptions</tt> request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file for which launch data is being provided. This will either
              be a Dart library or an HTML file.
            </p>
          </field>
          <field name="kind" optional="true">
            <ref>ExecutableKind</ref>
            <p>
              The kind of the executable file. This field is omitted if the file
              is not a Dart file.
            </p>
          </field>
          <field name="referencedFiles" optional="true">
            <list><ref>FilePath</ref></list>
            <p>
              A list of the Dart files that are referenced by the file. This
              field is omitted if the file is not an HTML file.
            </p>
          </field>
        </params>
      </notification>
    </domain>
    <types>
      <h2 class="domain"><a name="types">Types</a></h2>
      <p>
        This section contains descriptions of the data types referenced
        in the API’s of the various domains.
      </p>
      <type name="AddContentOverlay">
        <p>
          A directive to begin overlaying the contents of a file.  The
          supplied content will be used for analysis in place of the
          file contents in the filesystem.
        </p>
        <p>
          If this directive is used on a file that already has a file
          content overlay, the old overlay is discarded and replaced
          with the new one.
        </p>
        <object>
          <field name="type" value="add"><ref>String</ref></field>
          <field name="content">
            <ref>String</ref>
            <p>
              The new content of the file.
            </p>
          </field>
        </object>
      </type>
      <type name="AnalysisError">
        <p>
          An indication of an error, warning, or hint that was produced
          by the analysis.
        </p>
        <object>
          <field name="severity">
            <ref>AnalysisErrorSeverity</ref>
            <p>
              The severity of the error.
            </p>
          </field>
          <field name="type">
            <ref>AnalysisErrorType</ref>
            <p>
              The type of the error.
            </p>
          </field>
          <field name="location">
            <ref>Location</ref>
            <p>
              The location associated with the error.
            </p>
          </field>
          <field name="message">
            <ref>String</ref>
            <p>
              The message to be displayed for this error. The message
              should indicate what is wrong with the code and why it is
              wrong.
            </p>
          </field>
          <field name="correction" optional="true">
            <ref>String</ref>
            <p>
              The correction message to be displayed for this error. The
              correction message should indicate how the user can fix
              the error. The field is omitted if there is no correction
              message associated with the error code.
            </p>
          </field>
        </object>
      </type>
      <type name="AnalysisErrorFixes">
        <p>
          A list of fixes associated with a specific error
        </p>
        <object>
          <field name="error">
            <ref>AnalysisError</ref>
            <p>
              The error with which the fixes are associated.
            </p>
          </field>
          <field name="fixes">
            <list><ref>SourceChange</ref></list>
            <p>
              The fixes associated with the error.
            </p>
          </field>
        </object>
      </type>
      <type name="AnalysisErrorSeverity">
        <p>
          An enumeration of the possible severities of analysis
          errors.
        </p>
        <enum>
          <value><code>INFO</code></value>
          <value><code>WARNING</code></value>
          <value><code>ERROR</code></value>
        </enum>
      </type>
      <type name="AnalysisErrorType">
        <p>
          An enumeration of the possible types of analysis errors.
        </p>
        <enum>
          <value><code>CHECKED_MODE_COMPILE_TIME_ERROR</code></value>
          <value><code>COMPILE_TIME_ERROR</code></value>
          <value><code>HINT</code></value>
          <value><code>LINT</code></value>
          <value><code>STATIC_TYPE_WARNING</code></value>
          <value><code>STATIC_WARNING</code></value>
          <value><code>SYNTACTIC_ERROR</code></value>
          <value><code>TODO</code></value>
        </enum>
      </type>
      <type name="AnalysisOptions">
        <p>
          A set of options controlling what kind of analysis is to be
          performed. If the value of a field is omitted the value of the
          option will not be changed.
        </p>
        <object>
          <field name="enableAsync" optional="true">
            <ref>bool</ref>
            <p><b><i>Deprecated</i></b></p>
            <p>
              True if the client wants to enable support for the
              proposed async feature.
            </p>
          </field>
          <field name="enableDeferredLoading" optional="true">
            <ref>bool</ref>
            <p><b><i>Deprecated</i></b></p>
            <p>
              True if the client wants to enable support for the
              proposed deferred loading feature.
            </p>
          </field>
          <field name="enableEnums" optional="true">
            <ref>bool</ref>
            <p><b><i>Deprecated</i></b></p>
            <p>
              True if the client wants to enable support for the
              proposed enum feature.
            </p>
          </field>
          <field name="enableNullAwareOperators" optional="true">
            <ref>bool</ref>
            <p>
              True if the client wants to enable support for the
              proposed "null aware operators" feature.
            </p>
          </field>
          <field name="generateDart2jsHints" optional="true">
            <ref>bool</ref>
            <p>
              True if hints that are specific to dart2js should be
              generated. This option is ignored if generateHints is false.
            </p>
          </field>
          <field name="generateHints" optional="true">
            <ref>bool</ref>
            <p>
              True if hints should be generated as part of generating
              errors and warnings.
            </p>
          </field>
          <field name="generateLints" optional="true">
            <ref>bool</ref>
            <p>
              True if lints should be generated as part of generating
              errors and warnings.
            </p>
          </field>
        </object>
      </type>
      <type name="AnalysisService">
        <p>
          An enumeration of the services provided by the analysis
          domain.
        </p>
        <enum>
          <value><code>FOLDING</code></value>
          <value><code>HIGHLIGHTS</code></value>
          <value><code>INVALIDATE</code></value>
          <value><code>NAVIGATION</code></value>
          <value><code>OCCURRENCES</code></value>
          <value><code>OUTLINE</code></value>
          <value><code>OVERRIDES</code></value>
        </enum>
      </type>
      <type name="AnalysisStatus">
        <p>
          An indication of the current state of analysis.
        </p>
        <object>
          <field name="isAnalyzing">
            <ref>bool</ref>
            <p>True if analysis is currently being performed.</p>
          </field>
          <field name="analysisTarget" optional="true">
            <ref>String</ref>
            <p>
              The name of the current target of analysis. This field is
              omitted if analyzing is false.
            </p>
          </field>
        </object>
      </type>
      <type name="ChangeContentOverlay">
        <p>
          A directive to modify an existing file content overlay. One or more
          ranges of text are deleted from the old file content overlay and
          replaced with new text.
        </p>
        <p>
        The edits are applied in the order in which they occur in the list.
        This means that the offset of each edit must be correct under the
        assumption that all previous edits have been applied.
        </p>
        <p>
          It is an error to use this overlay on a file that does not yet have
          a file content overlay or that has had its overlay removed via
          <a href="#type_RemoveContentOverlay">RemoveContentOverlay</a>.
        </p>
        <p>
          If any of the edits cannot be applied due to its offset or
          length being out of range, an INVALID_OVERLAY_CHANGE error
          will be reported.
        </p>
        <object>
          <field name="type" value="change"><ref>String</ref></field>
          <field name="edits">
            <list><ref>SourceEdit</ref></list>
            <p>
              The edits to be applied to the file.
            </p>
          </field>
        </object>
      </type>
      <type name="CompletionId">
        <ref>String</ref>
        <p>
          An identifier used to associate completion results with a
          completion request.
        </p>
      </type>
      <type name="CompletionSuggestion">
        <p>
          A suggestion for how to complete partially entered text. Many
          of the fields are optional, depending on the kind of element
          being suggested.
        </p>
        <object>
          <field name="kind">
            <ref>CompletionSuggestionKind</ref>
            <p>
              The kind of element being suggested.
            </p>
          </field>
          <field name="relevance">
            <ref>int</ref>
            <p>
              The relevance of this completion suggestion
              where a higher number indicates a higher relevance.
            </p>
          </field>
          <field name="completion">
            <ref>String</ref>
            <p>
              The identifier to be inserted if the suggestion is
              selected. If the suggestion is for a method or function,
              the client might want to additionally insert a template
              for the parameters. The information required in order to
              do so is contained in other fields.
            </p>
          </field>
          <field name="selectionOffset">
            <ref>int</ref>
            <p>
              The offset, relative to the beginning of the completion,
              of where the selection should be placed after insertion.
            </p>
          </field>
          <field name="selectionLength">
            <ref>int</ref>
            <p>
              The number of characters that should be selected after
              insertion.
            </p>
          </field>
          <field name="isDeprecated">
            <ref>bool</ref>
            <p>
              True if the suggested element is deprecated.
            </p>
          </field>
          <field name="isPotential">
            <ref>bool</ref>
            <p>
              True if the element is not known to be valid for the
              target. This happens if the type of the target is dynamic.
            </p>
          </field>
          <field name="docSummary" optional="true">
            <ref>String</ref>
            <p>
              An abbreviated version of the Dartdoc associated with the
              element being suggested, This field is omitted if there is
              no Dartdoc associated with the element.
            </p>
          </field>
          <field name="docComplete" optional="true">
            <ref>String</ref>
            <p>
              The Dartdoc associated with the element being suggested,
              This field is omitted if there is no Dartdoc associated
              with the element.
            </p>
          </field>
          <field name="declaringType" optional="true">
            <ref>String</ref>
            <p>
              The class that declares the element being suggested. This
              field is omitted if the suggested element is not a member
              of a class.
            </p>
          </field>
          <field name="element" optional="true">
            <ref>Element</ref>
            <p>
              Information about the element reference being suggested.
            </p>
          </field>
          <field name="returnType" optional="true">
            <ref>String</ref>
            <p>
              The return type of the getter, function or method
              or the type of the field being suggested.
              This field is omitted if the suggested element
              is not a getter, function or method.
            </p>
          </field>
          <field name="parameterNames" optional="true">
            <list><ref>String</ref></list>
            <p>
              The names of the parameters of the function or method
              being suggested. This field is omitted if the suggested
              element is not a setter, function or method.
            </p>
          </field>
          <field name="parameterTypes" optional="true">
            <list><ref>String</ref></list>
            <p>
              The types of the parameters of the function or method
              being suggested. This field is omitted if the
              parameterNames field is omitted.
            </p>
          </field>
          <field name="requiredParameterCount" optional="true">
            <ref>int</ref>
            <p>
              The number of required parameters for the function or
              method being suggested. This field is omitted if the
              parameterNames field is omitted.
            </p>
          </field>
          <field name="hasNamedParameters" optional="true">
            <ref>bool</ref>
            <p>
              True if the function or method being suggested has at
              least one named parameter. This field is omitted if the
              parameterNames field is omitted.
            </p>
          </field>
          <field name="parameterName" optional="true">
            <ref>String</ref>
            <p>
              The name of the optional parameter being suggested. This
              field is omitted if the suggestion is not the addition of
              an optional argument within an argument list.
            </p>
          </field>
          <field name="parameterType" optional="true">
            <ref>String</ref>
            <p>
              The type of the options parameter being suggested. This
              field is omitted if the parameterName field is omitted.
            </p>
          </field>
          <field name="importUri" optional="true">
            <ref>String</ref>
            <p>
              The import to be added if the suggestion is out of scope
              and needs an import to be added to be in scope.
            </p>
          </field>
        </object>
      </type>
      <type name="CompletionSuggestionKind">
        <p>
          An enumeration of the kinds of elements that can be included
          in a completion suggestion.
        </p>
        <enum>
          <value>
          <code>ARGUMENT_LIST</code>
            <p>
              A list of arguments for the method or function that is being invoked.
              For this suggestion kind, the completion field is a textual representation
              of the invocation and the parameterNames, parameterTypes, and requiredParameterCount
              attributes are defined.
            </p>
          </value>
          <value><code>IMPORT</code></value>
          <value>
            <code>IDENTIFIER</code>
            <p>
              The element identifier should be inserted at the completion location.
              For example "someMethod" in import 'myLib.dart' show someMethod; .
              For suggestions of this kind, the element attribute is defined
              and the completion field is the element's identifier.
            </p>
          </value>
          <value>
            <code>INVOCATION</code>
            <p>
              The element is being invoked at the completion location.
              For example, "someMethod" in x.someMethod(); .
              For suggestions of this kind, the element attribute is defined
              and the completion field is the element's identifier.
            </p>
          </value>
          <value>
            <code>KEYWORD</code>
            <p>
              A keyword is being suggested.
              For suggestions of this kind, the completion is the keyword.
            </p>
          </value>
          <value>
            <code>NAMED_ARGUMENT</code>
            <p>
              A named argument for the current callsite is being suggested.
              For suggestions of this kind, the completion is
              the named argument identifier including a trailing ':' and space.
            </p>
          </value>
          <value><code>OPTIONAL_ARGUMENT</code></value>
          <value><code>PARAMETER</code></value>
        </enum>
      </type>
      <type name="Element">
        <p>
          Information about an element (something that can be declared
          in code).
        </p>
        <object>
          <field name="kind">
            <ref>ElementKind</ref>
            <p>
              The kind of the element.
            </p>
          </field>
          <field name="name">
            <ref>String</ref>
            <p>
              The name of the element. This is typically used as the
              label in the outline.
            </p>
          </field>
          <field name="location" optional="true">
            <ref>Location</ref>
            <p>
              The location of the name in the declaration of the
              element.
            </p>
          </field>
          <field name="flags">
            <ref>int</ref>
            <p>
              A bit-map containing the following flags:
            </p>
            <ul>
              <li>0x01 - set if the element is explicitly or implicitly abstract</li>
              <li>0x02 - set if the element was declared to be ‘const’</li>
              <li>0x04 - set if the element was declared to be ‘final’</li>
              <li>0x08 - set if the element is a static member of a class or is a top-level function or field</li>
              <li>0x10 - set if the element is private</li>
              <li>0x20 - set if the element is deprecated</li>
            </ul>
          </field>
          <field name="parameters" optional="true">
            <ref>String</ref>
            <p>
              The parameter list for the element. If the element is not
              a method or function this field will not be defined. If
              the element doesn't have parameters (e.g. getter), this field
              will not be defined. If the element has zero parameters, this
              field will have a value of "()".
            </p>
          </field>
          <field name="returnType" optional="true">
            <ref>String</ref>
            <p>
              The return type of the element. If the element is not a
              method or function this field will not be defined. If the
              element does not have a declared return type, this field
              will contain an empty string.
            </p>
          </field>
          <field name="typeParameters" optional="true">
            <ref>String</ref>
            <p>
              The type parameter list for the element. If the element doesn't
              have type parameters, this field will not be defined.
            </p>
          </field>
        </object>
      </type>
      <type name="ElementKind">
        <p>
          An enumeration of the kinds of elements.
        </p>
        <enum>
          <value><code>CLASS</code></value>
          <value><code>CLASS_TYPE_ALIAS</code></value>
          <value><code>COMPILATION_UNIT</code></value>
          <value><code>CONSTRUCTOR</code></value>
          <value><code>ENUM</code></value>
          <value><code>ENUM_CONSTANT</code></value>
          <value><code>FIELD</code></value>
          <value><code>FUNCTION</code></value>
          <value><code>FUNCTION_TYPE_ALIAS</code></value>
          <value><code>GETTER</code></value>
          <value><code>LABEL</code></value>
          <value><code>LIBRARY</code></value>
          <value><code>LOCAL_VARIABLE</code></value>
          <value><code>METHOD</code></value>
          <value><code>PARAMETER</code></value>
          <value><code>PREFIX</code></value>
          <value><code>SETTER</code></value>
          <value><code>TOP_LEVEL_VARIABLE</code></value>
          <value><code>TYPE_PARAMETER</code></value>
          <value><code>UNIT_TEST_GROUP</code></value>
          <value><code>UNIT_TEST_TEST</code></value>
          <value><code>UNKNOWN</code></value>
        </enum>
      </type>
      <type name="ExecutableFile">
        <p>
          A description of an executable file.
        </p>
        <object>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The path of the executable file.
            </p>
          </field>
          <field name="kind">
            <ref>ExecutableKind</ref>
            <p>
              The kind of the executable file.
            </p>
          </field>
        </object>
      </type>
      <type name="ExecutableKind">
        <p>
          An enumeration of the kinds of executable files.
        </p>
        <enum>
          <value><code>CLIENT</code></value>
          <value><code>EITHER</code></value>
          <value><code>NOT_EXECUTABLE</code></value>
          <value><code>SERVER</code></value>
        </enum>
      </type>
      <type name="ExecutionContextId">
        <ref>String</ref>
        <p>
          The identifier for a execution context.
        </p>
      </type>
      <type name="ExecutionService">
        <p>
          An enumeration of the services provided by the execution
          domain.
        </p>
        <enum>
          <value><code>LAUNCH_DATA</code></value>
        </enum>
      </type>
      <type name="FilePath">
        <ref>String</ref>
        <p>
          The absolute path of a file.
        </p>
      </type>
      <type name="FoldingKind">
        <p>
          An enumeration of the kinds of folding regions.
        </p>
        <enum>
          <value><code>COMMENT</code></value>
          <value><code>CLASS_MEMBER</code></value>
          <value><code>DIRECTIVES</code></value>
          <value><code>DOCUMENTATION_COMMENT</code></value>
          <value><code>TOP_LEVEL_DECLARATION</code></value>
        </enum>
      </type>
      <type name="FoldingRegion">
        <p>
          A description of a region that can be folded.
        </p>
        <object>
          <field name="kind">
            <ref>FoldingKind</ref>
            <p>
              The kind of the region.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region to be folded.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region to be folded.
            </p>
          </field>
        </object>
      </type>
      <type name="HighlightRegion">
        <p>
          A description of a region that could have special highlighting
          associated with it.
        </p>
        <object>
          <field name="type">
            <ref>HighlightRegionType</ref>
            <p>
              The type of highlight associated with the region.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region to be highlighted.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region to be highlighted.
            </p>
          </field>
        </object>
      </type>
      <type name="HighlightRegionType">
        <p>
          An enumeration of the kinds of highlighting that can be
          applied to files.
        </p>
        <enum>
          <value><code>ANNOTATION</code></value>
          <value><code>BUILT_IN</code></value>
          <value><code>CLASS</code></value>
          <value><code>COMMENT_BLOCK</code></value>
          <value><code>COMMENT_DOCUMENTATION</code></value>
          <value><code>COMMENT_END_OF_LINE</code></value>
          <value><code>CONSTRUCTOR</code></value>
          <value><code>DIRECTIVE</code></value>
          <value><code>DYNAMIC_TYPE</code></value>
          <value><code>ENUM</code></value>
          <value><code>ENUM_CONSTANT</code></value>
          <value><code>FIELD</code></value>
          <value><code>FIELD_STATIC</code></value>
          <value><code>FUNCTION</code></value>
          <value><code>FUNCTION_DECLARATION</code></value>
          <value><code>FUNCTION_TYPE_ALIAS</code></value>
          <value><code>GETTER_DECLARATION</code></value>
          <value><code>IDENTIFIER_DEFAULT</code></value>
          <value><code>IMPORT_PREFIX</code></value>
          <value><code>KEYWORD</code></value>
          <value><code>LABEL</code></value>
          <value><code>LITERAL_BOOLEAN</code></value>
          <value><code>LITERAL_DOUBLE</code></value>
          <value><code>LITERAL_INTEGER</code></value>
          <value><code>LITERAL_LIST</code></value>
          <value><code>LITERAL_MAP</code></value>
          <value><code>LITERAL_STRING</code></value>
          <value><code>LOCAL_VARIABLE</code></value>
          <value><code>LOCAL_VARIABLE_DECLARATION</code></value>
          <value><code>METHOD</code></value>
          <value><code>METHOD_DECLARATION</code></value>
          <value><code>METHOD_DECLARATION_STATIC</code></value>
          <value><code>METHOD_STATIC</code></value>
          <value><code>PARAMETER</code></value>
          <value><code>SETTER_DECLARATION</code></value>
          <value><code>TOP_LEVEL_VARIABLE</code></value>
          <value><code>TYPE_NAME_DYNAMIC</code></value>
          <value><code>TYPE_PARAMETER</code></value>
        </enum>
      </type>
      <type name="HoverInformation">
        <p>
          The hover information associated with a specific location.
        </p>
        <object>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the range of characters that encompases the
              cursor position and has the same hover information as the
              cursor position.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the range of characters that encompases the
              cursor position and has the same hover information as the
              cursor position.
            </p>
          </field>
          <field name="containingLibraryPath" optional="true">
            <ref>String</ref>
            <p>
              The path to the defining compilation unit of the library
              in which the referenced element is declared. This data is
              omitted if there is no referenced element, or if the
              element is declared inside an HTML file.
            </p>
          </field>
          <field name="containingLibraryName" optional="true">
            <ref>String</ref>
            <p>
              The name of the library in which the referenced element is
              declared. This data is omitted if there is no referenced
              element, or if the element is declared inside an HTML
              file.
            </p>
          </field>
          <field name="containingClassDescription" optional="true">
            <ref>String</ref>
            <p>
              A human-readable description of the class declaring the element
              being referenced. This data is omitted if there is no referenced
              element, or if the element is not a class member.
            </p>
          </field>
          <field name="dartdoc" optional="true">
            <ref>String</ref>
            <p>
              The dartdoc associated with the referenced element. Other
              than the removal of the comment delimiters, including
              leading asterisks in the case of a block comment, the
              dartdoc is unprocessed markdown. This data is omitted if
              there is no referenced element, or if the element has no
              dartdoc.
            </p>
          </field>
          <field name="elementDescription" optional="true">
            <ref>String</ref>
            <p>
              A human-readable description of the element being
              referenced. This data is omitted if there is no referenced
              element.
            </p>
          </field>
          <field name="elementKind" optional="true">
            <ref>String</ref>
            <p>
              A human-readable description of the kind of element being
              referenced (such as “class” or “function type
              alias”). This data is omitted if there is no referenced
              element.
            </p>
          </field>
          <field name="parameter" optional="true">
            <ref>String</ref>
            <p>
              A human-readable description of the parameter
              corresponding to the expression being hovered over. This
              data is omitted if the location is not in an argument to a
              function.
            </p>
          </field>
          <field name="propagatedType" optional="true">
            <ref>String</ref>
            <p>
              The name of the propagated type of the expression. This
              data is omitted if the location does not correspond to an
              expression or if there is no propagated type information.
            </p>
          </field>
          <field name="staticType" optional="true">
            <ref>String</ref>
            <p>
              The name of the static type of the expression. This data
              is omitted if the location does not correspond to an
              expression.
            </p>
          </field>
        </object>
      </type>
      <type name="LinkedEditGroup">
        <p>
          A collection of positions that should be linked (edited
          simultaneously) for the purposes of updating code after a
          source change. For example, if a set of edits introduced a
          new variable name, the group would contain all of the
          positions of the variable name so that if the client wanted
          to let the user edit the variable name after the operation,
          all occurrences of the name could be edited simultaneously.
        </p>
        <object>
          <field name="positions">
            <list><ref>Position</ref></list>
            <p>
              The positions of the regions that should be edited
              simultaneously.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the regions that should be edited
              simultaneously.
            </p>
          </field>
          <field name="suggestions">
            <list><ref>LinkedEditSuggestion</ref></list>
            <p>
              Pre-computed suggestions for what every region might
              want to be changed to.
            </p>
          </field>
        </object>
      </type>
      <type name="LinkedEditSuggestion">
        <p>
          A suggestion of a value that could be used to replace all of
          the linked edit regions in a LinkedEditGroup.
        </p>
        <object>
          <field name="value">
            <ref>String</ref>
            <p>
              The value that could be used to replace all of the linked
              edit regions.
            </p>
          </field>
          <field name="kind">
            <ref>LinkedEditSuggestionKind</ref>
            <p>
              The kind of value being proposed.
            </p>
          </field>
        </object>
      </type>
      <type name="LinkedEditSuggestionKind">
        <p>
          An enumeration of the kind of values that can be suggested
          for a linked edit.
        </p>
        <enum>
          <value><code>METHOD</code></value>
          <value><code>PARAMETER</code></value>
          <value><code>TYPE</code></value>
          <value><code>VARIABLE</code></value>
        </enum>
      </type>
      <type name="Location">
        <p>
          A location (character range) within a file.
        </p>
        <object>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the range.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the range.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the range.
            </p>
          </field>
          <field name="startLine">
            <ref>int</ref>
            <p>
              The one-based index of the line containing the first
              character of the range.
            </p>
          </field>
          <field name="startColumn">
            <ref>int</ref>
            <p>
              The one-based index of the column containing the first
              character of the range.
            </p>
          </field>
        </object>
      </type>
      <type name="NavigationRegion">
        <p>
          A description of a region from which the user can navigate to
          the declaration of an element.
        </p>
        <object>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region from which the user can navigate.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region from which the user can navigate.
            </p>
          </field>
          <field name="targets">
            <list><ref>int</ref></list>
            <p>
              The indexes of the targets (in the enclosing navigation response)
              to which the given region is bound. By opening the target, clients
              can implement one form of navigation.
            </p>
          </field>
        </object>
      </type>
      <type name="NavigationTarget">
        <p>
          A description of a target to which the user can navigate.
        </p>
        <object>
          <field name="kind">
            <ref>ElementKind</ref>
            <p>
              The kind of the element.
            </p>
          </field>
          <field name="fileIndex">
            <ref>int</ref>
            <p>
              The index of the file (in the enclosing navigation response) to
              navigate to.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region from which the user can navigate.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region from which the user can navigate.
            </p>
          </field>
          <field name="startLine">
            <ref>int</ref>
            <p>
              The one-based index of the line containing the first
              character of the region.
            </p>
          </field>
          <field name="startColumn">
            <ref>int</ref>
            <p>
              The one-based index of the column containing the first
              character of the region.
            </p>
          </field>
        </object>
      </type>
      <type name="Occurrences">
        <p>
          A description of the references to a single element within a
          single file.
        </p>
        <object>
          <field name="element">
            <ref>Element</ref>
            <p>
              The element that was referenced.
            </p>
          </field>
          <field name="offsets">
            <list><ref>int</ref></list>
            <p>
              The offsets of the name of the referenced element within
              the file.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the name of the referenced element.
            </p>
          </field>
        </object>
      </type>
      <type name="Outline">
        <p>
          An node in the outline structure of a file.
        </p>
        <object>
          <field name="element">
            <ref>Element</ref>
            <p>
              A description of the element represented by this node.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the first character of the element. This is
              different than the offset in the Element, which if the
              offset of the name of the element. It can be used, for
              example, to map locations in the file back to an outline.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the element.
            </p>
          </field>
          <field name="children" optional="true">
            <list><ref>Outline</ref></list>
            <p>
              The children of the node. The field will be omitted if the
              node has no children.
            </p>
          </field>
        </object>
      </type>
      <type name="Override">
        <p>
          A description of a member that overrides an inherited member.
        </p>
        <object>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the name of the overriding member.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the name of the overriding member.
            </p>
          </field>
          <field name="superclassMember" optional="true">
            <ref>OverriddenMember</ref>
            <p>
              The member inherited from a superclass that is overridden
              by the overriding member. The field is omitted if there is
              no superclass member, in which case there must be at least
              one interface member.
            </p>
          </field>
          <field name="interfaceMembers" optional="true">
            <list><ref>OverriddenMember</ref></list>
            <p>
              The members inherited from interfaces that are overridden
              by the overriding member. The field is omitted if there
              are no interface members, in which case there must be a
              superclass member.
            </p>
          </field>
        </object>
      </type>
      <type name="OverriddenMember">
        <p>
          A description of a member that is being overridden.
        </p>
        <object>
          <field name="element">
            <ref>Element</ref>
            <p>
              The element that is being overridden.
            </p>
          </field>
          <field name="className">
            <ref>String</ref>
            <p>
              The name of the class in which the member is defined.
            </p>
          </field>
        </object>
      </type>
      <type name="Position">
        <p>
          A position within a file.
        </p>
        <object>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the position.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the position.
            </p>
          </field>
        </object>
      </type>
      <type name="PubStatus">
        <p>
          An indication of the current state of pub execution.
        </p>
        <object>
          <field name="isListingPackageDirs">
            <ref>bool</ref>
            <p>
              True if the server is currently running pub to produce a list of
              package directories.
            </p>
          </field>
        </object>
      </type>
      <type name="RefactoringKind">
        <p>
          An enumeration of the kinds of refactorings that can be
          created.
        </p>
        <enum>
          <value><code>CONVERT_GETTER_TO_METHOD</code></value>
          <value><code>CONVERT_METHOD_TO_GETTER</code></value>
          <value><code>EXTRACT_LOCAL_VARIABLE</code></value>
          <value><code>EXTRACT_METHOD</code></value>
          <value><code>INLINE_LOCAL_VARIABLE</code></value>
          <value><code>INLINE_METHOD</code></value>
          <value><code>MOVE_FILE</code></value>
          <value><code>RENAME</code></value>
          <value><code>SORT_MEMBERS</code></value>
        </enum>
      </type>
      <type name="RefactoringMethodParameter">
        <p>
          A description of a parameter in a method refactoring.
        </p>
        <object>
          <field name="id" optional="true">
            <ref>String</ref>
            <p>
              The unique identifier of the parameter.
              Clients may omit this field for the parameters they want to add.
            </p>
          </field>
          <field name="kind">
            <ref>RefactoringMethodParameterKind</ref>
            <p>
              The kind of the parameter.
            </p>
          </field>
          <field name="type">
            <ref>String</ref>
            <p>
              The type that should be given to the parameter, or the return type
              of the parameter's function type.
            </p>
          </field>
          <field name="name">
            <ref>String</ref>
            <p>
              The name that should be given to the parameter.
            </p>
          </field>
          <field name="parameters" optional="true">
            <ref>String</ref>
            <p>
              The parameter list of the parameter's function type.
              If the parameter is not of a function type, this field will
              not be defined. If the function type has zero parameters, this
              field will have a value of "()".
            </p>
          </field>
        </object>
      </type>
      <type name="RefactoringFeedback">
        <p>
          An abstract superclass of all refactoring feedbacks.
        </p>
        <object>
        </object>
      </type>
      <type name="RefactoringOptions">
        <p>
          An abstract superclass of all refactoring options.
        </p>
        <object>
        </object>
      </type>
      <type name="RefactoringMethodParameterKind">
        <p>
          An enumeration of the kinds of parameters.
        </p>
        <enum>
          <value><code>REQUIRED</code></value>
          <value><code>POSITIONAL</code></value>
          <value><code>NAMED</code></value>
        </enum>
      </type>
      <type name="RefactoringProblem">
        <p>
          A description of a problem related to a refactoring.
        </p>
        <object>
          <field name="severity">
            <ref>RefactoringProblemSeverity</ref>
            <p>
              The severity of the problem being represented.
            </p>
          </field>
          <field name="message">
            <ref>String</ref>
            <p>
              A human-readable description of the problem being
              represented.
            </p>
          </field>
          <field name="location" optional="true">
            <ref>Location</ref>
            <p>
              The location of the problem being represented.
              This field is omitted unless there is a specific location
              associated with the problem (such as a location where an element
              being renamed will be shadowed).
            </p>
          </field>
        </object>
      </type>
      <type name="RefactoringProblemSeverity">
        <p>
          An enumeration of the severities of problems that can be
          returned by the refactoring requests.
        </p>
        <enum>
          <value><code>INFO</code></value>
          <value><code>WARNING</code></value>
          <value><code>ERROR</code></value>
          <value><code>FATAL</code></value>
        </enum>
      </type>
      <type name="RemoveContentOverlay">
        <p>
          A directive to remove an existing file content overlay.
          After processing this directive, the file contents will once
          again be read from the file system.
        </p>
        <p>
          If this directive is used on a file that doesn't currently
          have a content overlay, it has no effect.
        </p>
        <object>
          <field name="type" value="remove"><ref>String</ref></field>
        </object>
      </type>
      <type name="RequestError">
        <p>
          An indication of a problem with the execution of the server,
          typically in response to a request.
        </p>
        <object>
          <field name="code">
            <ref>RequestErrorCode</ref>
            <p>
              A code that uniquely identifies the error that occurred.
            </p>
          </field>
          <field name="message">
            <ref>String</ref>
            <p>
              A short description of the error.
            </p>
          </field>
          <field name="stackTrace" optional="true">
            <ref>String</ref>
            <p>
              The stack trace associated with processing the request,
              used for debugging the server.
            </p>
          </field>
        </object>
      </type>
      <type name="RequestErrorCode">
        <p>
          An enumeration of the types of errors that can occur in the
          execution of the server.
        </p>
        <enum>
          <value>
            <code>CONTENT_MODIFIED</code>
            <p>
              An "analysis.getErrors" or "analysis.getNavigation" request could
              not be satisfied because the content of the file changed before
              the requested results could be computed.
            </p>
          </value>
          <value>
            <code>FORMAT_INVALID_FILE</code>
            <p>
              An "edit.format" request specified a FilePath
              which does not match a Dart file in an analysis root.
            </p>
          </value>
          <value>
            <code>FORMAT_WITH_ERRORS</code>
            <p>
              An "edit.format" request specified a file that contains syntax
              errors.
            </p>
          </value>
          <value>
            <code>GET_ERRORS_INVALID_FILE</code>
            <p>
              An "analysis.getErrors" request specified a FilePath
              which does not match a file currently subject to
              analysis.
            </p>
          </value>
          <value>
            <code>INVALID_ANALYSIS_ROOT</code>
            <p>
              A path passed as an argument to a request (such as
              analysis.reanalyze) is required to be an analysis root, but isn't.
            </p>
          </value>
          <value>
            <code>INVALID_EXECUTION_CONTEXT</code>
            <p>
              The context root used to create an execution context does not
              exist.
            </p>
          </value>
          <value>
            <code>INVALID_OVERLAY_CHANGE</code>
            <p>
              An "analysis.updateContent" request contained a
              ChangeContentOverlay object which can't be applied, due
              to an edit having an offset or length that is out of
              range.
            </p>
          </value>
          <value>
            <code>INVALID_PARAMETER</code>
            <p>
              One of the method parameters was invalid.
            </p>
          </value>
          <value>
            <code>INVALID_REQUEST</code>
            <p>
              A malformed request was received.
            </p>
          </value>
          <value>
            <code>NO_INDEX_GENERATED</code>
            <p>
              The "--no-index" flag was passed when the analysis server created,
              but this API call requires an index to have been generated.
            </p>
          </value>
          <value>
            <code>REFACTORING_REQUEST_CANCELLED</code>
            <p>
              Another refactoring request was received during processing of
              this one.
            </p>
          </value>
          <value>
            <code>SERVER_ALREADY_STARTED</code>
            <p>
              The analysis server has already been started (and hence
              won't accept new connections).
            </p>
            <p>
              This error is included for future expansion; at present
              the analysis server can only speak to one client at a
              time so this error will never occur.
            </p>
          </value>
          <value>
            <code>SERVER_ERROR</code>
            <p>
              An internal error occurred in the analysis server.
              Also see the server.error notification.
            </p>
          </value>
          <value>
            <code>SORT_MEMBERS_INVALID_FILE</code>
            <p>
              An "edit.sortMembers" request specified a FilePath
              which does not match a Dart file in an analysis root.
            </p>
          </value>
          <value>
            <code>SORT_MEMBERS_PARSE_ERRORS</code>
            <p>
              An "edit.sortMembers" request specified a Dart file that has
              scan or parse errors.
            </p>
          </value>
          <value>
            <code>UNANALYZED_PRIORITY_FILES</code>
            <p>
              An "analysis.setPriorityFiles" request includes one or
              more files that are not being analyzed.
            </p>
            <p>
              This is a legacy error; it will be removed before the
              API reaches version 1.0.
            </p>
            <!-- TODO(paulberry): remove this error and the code that
                 generates it. -->
          </value>
          <value>
            <code>UNKNOWN_REQUEST</code>
            <p>
              A request was received which the analysis server does
              not recognize, or cannot handle in its current
              configuation.
            </p>
          </value>
          <value>
            <code>UNKNOWN_SOURCE</code>
            <p>
              The analysis server was requested to perform an action
              on a source that does not exist.
            </p>
          </value>
          <value>
            <code>UNSUPPORTED_FEATURE</code>
            <p>
              The analysis server was requested to perform an action
              which is not supported.
            </p>
            <p>
              This is a legacy error; it will be removed before the
              API reaches version 1.0.
            </p>
            <!-- TODO(paulberry): remove this error and the code that
                 generates it. -->
          </value>
        </enum>
      </type>
      <type name="SearchId">
        <ref>String</ref>
        <p>
          An identifier used to associate search results with a search
          request.
        </p>
      </type>
      <type name="SearchResult">
        <p>
          A single result from a search request.
        </p>
        <object>
          <field name="location">
            <ref>Location</ref>
            <p>
              The location of the code that matched the search criteria.
            </p>
          </field>
          <field name="kind">
            <ref>SearchResultKind</ref>
            <p>
              The kind of element that was found or the kind of
              reference that was found.
            </p>
          </field>
          <field name="isPotential">
            <ref>bool</ref>
            <p>
              True if the result is a potential match but cannot be
              confirmed to be a match. For example, if all references to
              a method m defined in some class were requested, and a
              reference to a method m from an unknown class were found,
              it would be marked as being a potential match.
            </p>
          </field>
          <field name="path">
            <list><ref>Element</ref></list>
            <p>
              The elements that contain the result, starting with the
              most immediately enclosing ancestor and ending with the
              library.
            </p>
          </field>
        </object>
      </type>
      <type name="SearchResultKind">
        <p>
          An enumeration of the kinds of search results returned by the
          search domain.
        </p>
        <enum>
          <value>
            <code>DECLARATION</code>
            <p>
              The declaration of an element.
            </p>
          </value>
          <value>
            <code>INVOCATION</code>
            <p>
              The invocation of a function or method.
            </p>
          </value>
          <value>
            <code>READ</code>
            <p>
              A reference to a field, parameter or variable where it is being read.
            </p>
          </value>
          <value>
            <code>READ_WRITE</code>
            <p>
              A reference to a field, parameter or variable where it is being read and written.
            </p>
          </value>
          <value>
            <code>REFERENCE</code>
            <p>
              A reference to an element.
            </p>
          </value>
          <value>
            <code>UNKNOWN</code>
            <p>
              Some other kind of search result.
            </p>
          </value>
          <value>
            <code>WRITE</code>
            <p>
              A reference to a field, parameter or variable where it is being written.
            </p>
          </value>
        </enum>
      </type>
      <type name="ServerService">
        <p>
          An enumeration of the services provided by the server domain.
        </p>
        <enum>
          <value><code>STATUS</code></value>
        </enum>
      </type>
      <type name="SourceChange">
        <p>
          A description of a set of edits that implement a single
          conceptual change.
        </p>
        <object>
          <field name="message">
            <ref>String</ref>
            <p>
              A human-readable description of the change to be applied.
            </p>
          </field>
          <field name="edits">
            <list><ref>SourceFileEdit</ref></list>
            <p>
              A list of the edits used to effect the change, grouped by
              file.
            </p>
          </field>
          <field name="linkedEditGroups">
            <list><ref>LinkedEditGroup</ref></list>
            <p>
              A list of the linked editing groups used to customize
              the changes that were made.
            </p>
          </field>
          <field name="selection" optional="true">
            <ref>Position</ref>
            <p>
              The position that should be selected after the edits
              have been applied.
            </p>
          </field>
        </object>
      </type>
      <type name="SourceEdit">
        <p>
          A description of a single change to a single file.
        </p>
        <object>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region to be modified.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region to be modified.
            </p>
          </field>
          <field name="replacement">
            <ref>String</ref>
            <p>
              The code that is to replace the specified region in the
              original code.
            </p>
          </field>
          <field name="id" optional="true">
            <ref>String</ref>
            <p>
              An identifier that uniquely identifies this source edit from other
              edits in the same response. This field is omitted unless a
              containing structure needs to be able to identify the edit for
              some reason.
            </p>
            <p>
              For example, some refactoring operations can produce edits that
              might not be appropriate (referred to as potential edits). Such
              edits will have an id so that they can be referenced. Edits in
              the same response that do not need to be referenced will not have
              an id.
            </p>
          </field>
        </object>
      </type>
      <type name="SourceFileEdit">
        <p>
          A description of a set of changes to a single file.
        </p>
        <object>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the code to be modified.
            </p>
          </field>
          <field name="fileStamp">
            <ref>long</ref>
            <p>
              The modification stamp of the file at the moment when the change
              was created, in milliseconds since the "Unix epoch". Will be -1 if
              the file did not exist and should be created. The client may use
              this field to make sure that the file was not changed since then,
              so it is safe to apply the change.
            </p>
          </field>
          <field name="edits">
            <list><ref>SourceEdit</ref></list>
            <p>
              A list of the edits used to effect the change.
            </p>
          </field>
        </object>
      </type>
      <type name="TypeHierarchyItem">
        <p>
          A representation of a class in a type hierarchy.
        </p>
        <object>
          <field name="classElement">
            <ref>Element</ref>
            <p>
              The class element represented by this item.
            </p>
          </field>
          <field name="displayName" optional="true">
            <ref>String</ref>
            <p>
              The name to be displayed for the class. This field will be
              omitted if the display name is the same as the name of the
              element. The display name is different if there is
              additional type information to be displayed, such as type
              arguments.
            </p>
          </field>
          <field name="memberElement" optional="true">
            <ref>Element</ref>
            <p>
              The member in the class corresponding to the member on
              which the hierarchy was requested. This field will be
              omitted if the hierarchy was not requested for a member or
              if the class does not have a corresponding member.
            </p>
          </field>
          <field name="superclass" optional="true">
            <ref>int</ref>
            <p>
              The index of the item representing the superclass of
              this class. This field will be omitted if this item
              represents the class Object.
            </p>
          </field>
          <field name="interfaces">
            <list><ref>int</ref></list>
            <p>
              The indexes of the items representing the interfaces
              implemented by this class. The list will be empty if
              there are no implemented interfaces.
            </p>
          </field>
          <field name="mixins">
            <list><ref>int</ref></list>
            <p>
              The indexes of the items representing the mixins
              referenced by this class. The list will be empty if
              there are no classes mixed in to this class.
            </p>
          </field>
          <field name="subclasses">
            <list><ref>int</ref></list>
            <p>
              The indexes of the items representing the subtypes of
              this class. The list will be empty if there are no
              subtypes or if this item represents a supertype of the
              pivot type.
            </p>
          </field>
        </object>
      </type>
    </types>
    <refactorings>
      <h2><a name="refactorings">Refactorings</a></h2>
      <p>
        This section contains additional information for each kind of
        refactoring. In addition to a brief description of the
        refactoring, there is a specification of the feedback that is
        provided when a refactoring is requested using the
        edit.getRefactoring request (designed to improve the UX)
        and the options that may be provided to edit.getRefactoring.
      </p>
      <refactoring kind="CONVERT_GETTER_TO_METHOD">
        <p>
          Convert a getter into a method by removing the keyword get
          and adding an empty parameter list.
        </p>
        <p>
          It is an error if the range contains anything other than all
          or part of the name of a single getter.
        </p>
      </refactoring>
      <refactoring kind="CONVERT_METHOD_TO_GETTER">
        <p>
          Convert a method into a getter by adding the keyword get and
          removing the parameter list.
        </p>
        <p>
          It is an error if the range contains anything other than all
          or part of the name of a single method or if the method has
          a non-empty parameter list.
        </p>
      </refactoring>
      <refactoring kind="EXTRACT_LOCAL_VARIABLE">
        <p>
          Create a local variable initialized by a specified
          expression.
        </p>
        <p>
          It is an error if the range contains anything other than a
          complete expression (no partial expressions are allowed).
        </p>
        <feedback>
          <field name="names">
            <list><ref>String</ref></list>
            <p>
              The proposed names for the local variable.
            </p>
          </field>
          <field name="offsets">
            <list><ref>int</ref></list>
            <p>
              The offsets of the expressions that would be replaced by
              a reference to the variable.
            </p>
          </field>
          <field name="lengths">
            <list><ref>int</ref></list>
            <p>
              The lengths of the expressions that would be replaced by
              a reference to the variable. The lengths correspond to
              the offsets. In other words, for a given expression, if
              the offset of that expression is offsets[i], then the
              length of that expression is lengths[i].
            </p>
          </field>
        </feedback>
        <options>
          <field name="name">
            <ref>String</ref>
            <p>
              The name that the local variable should be given.
            </p>
          </field>
          <field name="extractAll">
            <ref>bool</ref>
            <p>
              True if all occurrences of the expression within the
              scope in which the variable will be defined should be
              replaced by a reference to the local variable. The
              expression used to initiate the refactoring will always
              be replaced.
            </p>
          </field>
        </options>
      </refactoring>
      <refactoring kind="EXTRACT_METHOD">
        <p>
          Create a method whose body is the specified expression or
          list of statements, possibly augmented with a return
          statement.
        </p>
        <p>
          It is an error if the range contains anything other than a
          complete expression (no partial expressions are allowed) or
          a complete sequence of statements.
        </p>
        <feedback>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset to the beginning of the expression or
              statements that will be extracted.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the expression or statements that will be
              extracted.
            </p>
          </field>
          <field name="returnType">
            <ref>String</ref>
            <p>
              The proposed return type for the method.
              If the returned element does not have a declared return type,
              this field will contain an empty string.
            </p>
          </field>
          <field name="names">
            <list><ref>String</ref></list>
            <p>
              The proposed names for the method.
            </p>
          </field>
          <field name="canCreateGetter">
            <ref>bool</ref>
            <p>
              True if a getter could be created rather than a method.
            </p>
          </field>
          <field name="parameters">
            <list><ref>RefactoringMethodParameter</ref></list>
            <p>
              The proposed parameters for the method.
            </p>
          </field>
          <field name="offsets">
            <list><ref>int</ref></list>
            <p>
              The offsets of the expressions or statements that would
              be replaced by an invocation of the method.
            </p>
          </field>
          <field name="lengths">
            <list><ref>int</ref></list>
            <p>
              The lengths of the expressions or statements that would
              be replaced by an invocation of the method. The lengths
              correspond to the offsets. In other words, for a given
              expression (or block of statements), if the offset of
              that expression is offsets[i], then the length of that
              expression is lengths[i].
            </p>
          </field>
        </feedback>
        <options>
          <field name="returnType">
            <ref>String</ref>
            <p>
              The return type that should be defined for the method.
            </p>
          </field>
          <field name="createGetter">
            <ref>bool</ref>
            <p>
              True if a getter should be created rather than a
              method. It is an error if this field is true and the
              list of parameters is non-empty.
            </p>
          </field>
          <field name="name">
            <ref>String</ref>
            <p>
              The name that the method should be given.
            </p>
          </field>
          <field name="parameters">
            <list><ref>RefactoringMethodParameter</ref></list>
            <p>
              The parameters that should be defined for the method.
            </p>
            <p>
              It is an error if a REQUIRED or NAMED parameter follows a
              POSITIONAL parameter.
              It is an error if a REQUIRED or POSITIONAL parameter follows a
              NAMED parameter.
            </p>
            <ul>
              <li>
                To change the order and/or update proposed parameters, add
                parameters with the same identifiers as proposed.
              </li>
              <li>To add new parameters, omit their identifier.</li>
              <li>To remove some parameters, omit them in this list.</li>
            </ul>
          </field>
          <field name="extractAll">
            <ref>bool</ref>
            <p>
              True if all occurrences of the expression or statements
              should be replaced by an invocation of the method. The
              expression or statements used to initiate the
              refactoring will always be replaced.
            </p>
          </field>
        </options>
      </refactoring>
      <refactoring kind="INLINE_LOCAL_VARIABLE">
        <p>
          Inline the initializer expression of a local variable in
          place of any references to that variable.
        </p>
        <p>
          It is an error if the range contains anything other than all
          or part of the name of a single local variable.
        </p>
        <feedback>
          <field name="name">
            <ref>String</ref>
            <p>
              The name of the variable being inlined.
            </p>
          </field>
          <field name="occurrences">
            <ref>int</ref>
            <p>
              The number of times the variable occurs.
            </p>
          </field>
        </feedback>
      </refactoring>
      <refactoring kind="INLINE_METHOD">
        <p>
          Inline a method in place of one or all references to that
          method.
        </p>
        <p>
          It is an error if the range contains anything other than all
          or part of the name of a single method.
        </p>
        <feedback>
          <field name="className" optional="true">
            <ref>String</ref>
            <p>
              The name of the class enclosing the method being inlined.
              If not a class member is being inlined, this field will be absent.
            </p>
          </field>
          <field name="methodName">
            <ref>String</ref>
            <p>
              The name of the method (or function) being inlined.
            </p>
          </field>
          <field name="isDeclaration">
            <ref>bool</ref>
            <p>
              True if the declaration of the method is selected.
              So all references should be inlined.
            </p>
          </field>
        </feedback>
        <options>
          <field name="deleteSource">
            <ref>bool</ref>
            <p>
              True if the method being inlined should be removed.
              It is an error if this field is true and inlineAll is false.
            </p>
          </field>
          <field name="inlineAll">
            <ref>bool</ref>
            <p>
              True if all invocations of the method should be inlined,
              or false if only the invocation site used to create this
              refactoring should be inlined.
            </p>
          </field>
        </options>
      </refactoring>
      <refactoring kind="MOVE_FILE">
        <p>
          Move the given file and update all of the references to that file
          and from it. The move operation is supported in general case - for
          renaming a file in the same folder, moving it to a different folder
          or both.
        </p>
        <p>
          The refactoring must be activated before an actual file moving
          operation is performed.
        </p>
        <p>
          The "offset" and "length" fields from the request are ignored, but the
          file specified in the request specifies the file to be moved.
        </p>
        <options>
          <field name="newFile">
            <ref>FilePath</ref>
            <p>
              The new file path to which the given file is being moved.
            </p>
          </field>
        </options>
      </refactoring>
      <refactoring kind="RENAME">
        <p>
          Rename a given element and all of the references to that
          element.
        </p>
        <p>
          It is an error if the range contains anything other than all
          or part of the name of a single function (including methods,
          getters and setters), variable (including fields, parameters
          and local variables), class or function type.
        </p>
        <feedback>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset to the beginning of the name selected to be
              renamed.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the name selected to be renamed.
            </p>
          </field>
          <field name="elementKindName">
            <ref>String</ref>
            <p>
              The human-readable description of the kind of element being
              renamed (such as “class” or “function type
              alias”).
            </p>
          </field>
          <field name="oldName">
            <ref>String</ref>
            <p>
              The old name of the element before the refactoring.
            </p>
          </field>
        </feedback>
        <options>
          <field name="newName">
            <ref>String</ref>
            <p>
              The name that the element should have after the
              refactoring.
            </p>
          </field>
        </options>
      </refactoring>
    </refactorings>
    <h2>Errors</h2>
    <p>
      This section contains a list of all of the errors that are
      produced by the server and the data that is returned with each.
    </p>
    <p>
      TBD
    </p>
  </body>
</html>
